'''
Created on 10/10/2013

@author: daniel
'''
import colecciones.listaEnlazada
import unittest


class Vertice(object):
    '''
    Clase que define otro elemento del conjunto "grafos"
    '''
    def __init__(self,elem,lista,posicion=None):
        self.__dato__=elem
        self.__posicion__=posicion
        self.__adyacentes__=lista
        
    def getDato(self): #Retorna el dato del vertice.
        return self.__dato__
    
    def setDato(self, dato): #Setea el dato del vertice
        self.__dato__=dato
    
    def getPosicion(self): #Retorna la posicion del vertice.
        return self.__posicion__
    
    def setPosicion(self, posicion): # Setea la posicion del vertice.
        self.__posicion__=posicion
    
    def getListaDeAdyacentes(self): #Retorna la lista de adyacentes (aristas) del vertice.
        return self.__adyacentes__
    
    def __cmp__(self,otroVertice):
        return self.__dato__.__cmp__(otroVertice.__dato__)
    
    def __str__(self):
        return self.__dato__.__str__()

class Test(unittest.TestCase):

    def testName(self):
        self.assertIsInstance(Vertice(None,colecciones.listaEnlazada.ListaEnlazada()), Vertice, "Testea la correcta creacion")
        
    def testGetDato(self):
        first=Vertice(45,colecciones.listaEnlazada.ListaEnlazada())
        self.assertEquals(first.getDato(),45,"Verifica correcta devolucion")
        self.assertNotEquals(first.getDato(),44,"Verifica correcta devolucion")
        self.assertNotEquals(first.getDato(),43,"Verifica correcta devolucion")

    def testGetListaDeAdyacentes(self):
        first=Vertice(45,colecciones.listaEnlazada.ListaEnlazada())
        self.assertTrue(first.getListaDeAdyacentes().esVacia(),"Verifica vertice sin adyacentes")
        first.getListaDeAdyacentes().agregar(45,first.getListaDeAdyacentes().getTamanio())
        self.assertFalse(first.getListaDeAdyacentes().esVacia(),"Verifica vertice con adyacentes")
        self.assertEquals(first.getListaDeAdyacentes().elemento(0), 45, "verifica vertice agregado")
        self.assertNotEquals(first.getDato(),44,"Verifica comportamiento ante absurdo")
        self.assertNotEquals(first.getDato(),43,"Verifica comportamiento ante absurdo")
        
    def testGetPosicion(self):
        first=Vertice(45,colecciones.listaEnlazada.ListaEnlazada(),856)
        self.assertEquals(first.getPosicion(),856,"Verifica devolucion de la posicion")

    def testSetPosicion(self):
        first=Vertice(45,856)
        first.setPosicion(236)
        self.assertEquals(first.getPosicion(),236,"Verifica devolucion de la posicion")

if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.testName']
    unittest.main()